---
title: "01-Java 平台概述"
aliases:
- "Java 平台概述"
created: 2025-12-23
---
# Java 平台概述
## **一、Java 发展简史**
```drawio
```
> 💡 ***LTS (Long-Term Support)**:长期支持版本,Oracle 提供至少 8 年的更新支持。目前的 LTS 版本1有:Java 8、11、17、21*
## **二、Java 的核心特性**
### **2.1 整体特性图**
```drawio
```
### **2.2 面向对象(OOP)**
Java 是**纯面向对象**语言,支持三大核心特性:
```java
// ======================== 封装 ========================
// 将数据和行为包装在一起,隐藏内部实现细节
public class BankAccount {
private double balance; // 私有属性,外部无法直接访问
public void deposit(double amount) { // 公开方法作为访问入口
if (amount > 0) {
this.balance += amount;
}
}
public double getBalance() { // 只读访问
return this.balance;
}
}
// ======================== 继承 ========================
// 子类复用父类的属性和方法,实现代码重用
public class Animal {
protected String name;
public void eat() {
System.out.println(name + " is eating");
}
}
public class Dog extends Animal { // Dog 继承 Animal
public void bark() {
System.out.println(name + " is barking");
}
}
// ======================== 多态 ========================
// 同一接口,不同实现;父类引用指向子类对象
public class Cat extends Animal {
@Override
public void eat() {
System.out.println(name + " eats fish"); // 重写父类方法
}
}
// 多态的体现
Animal animal1 = new Dog(); // 父类引用 → 子类对象
Animal animal2 = new Cat();
animal1.eat(); // 调用 Dog 的 eat(如果重写了)
animal2.eat(); // 调用 Cat 的 eat
```
多态的底层机制:
```drawio
```
### **2.3 跨平台性(Write Once, Run Anywhere)**
#### **原理图解**
```drawio
```
#### **跨平台的本质**
```java
// 同一份代码
public class CrossPlatformDemo {
public static void main(String[] args) {
System.out.println("当前操作系统: " + System.getProperty("os.name"));
System.out.println("Java 版本: " + System.getProperty("java.version"));
System.out.println("文件分隔符: " + java.io.File.separator);
}
}
```
```yaml
运行结果(不同平台):
Windows: Linux: macOS:
当前操作系统: Windows 10 当前操作系统: Linux 当前操作系统: Mac OS X
Java 版本: 17.0.2 Java 版本: 17.0.2 Java 版本: 17.0.2
文件分隔符: \ 文件分隔符: / 文件分隔符: /
```
> *⚠️ **现代视角**:容器技术(Docker/K8s)成熟后,跨平台已不再是 Java 独有优势。Java 真正的核心竞争力是其**庞大成熟的生态系统**。*
### **2.4 内置多线程支持**
#### **Java vs C++ 多线程对比**
```java
// ==================== Java 多线程(语言原生支持)====================
public class JavaThread extends Thread {
@Override
public void run() {
System.out.println("Java 线程运行中: " + Thread.currentThread().getName());
}
public static void main(String[] args) {
new JavaThread().start();
// 或使用 Lambda(Java 8+)
new Thread(() -> System.out.println("Lambda 线程")).start();
// 或使用线程池
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> System.out.println("线程池任务"));
}
}
```
```
// ==================== C++ 多线程(C++11 前需要依赖系统 API)====================
// C++11 之前 - Windows 平台
#include
DWORD WINAPI ThreadFunc(LPVOID lpParam) {
printf("Windows 线程\n");
return 0;
}
int main() {
CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
}
// C++11 之后 - 标准库支持
#include
int main() {
std::thread t([]() {
std::cout << "C++11 标准线程" << std::endl;
});
t.join();
}
```
#### **Java 并发包体系**
```drawio
```
### **2.5 自动内存管理(GC)**
#### **手动 vs 自动内存管理**
```
// ==================== C++ 手动内存管理 ====================
int main() {
int* arr = new int[100]; // 申请内存
// 使用内存...
delete[] arr; // 必须手动释放!
arr = nullptr; // 避免悬空指针
// 忘记 delete → 内存泄漏
// 重复 delete → 程序崩溃
// 使用已释放内存 → 未定义行为
}
```
```java
// ==================== Java 自动内存管理 ====================
public class MemoryDemo {
public static void main(String[] args) {
int[] arr = new int[100]; // 在堆上分配
// 使用内存...
arr = null; // 解除引用(可选)
// JVM 的 GC 会自动回收不再使用的对象
// 程序员无需关心何时释放
}
}
```
#### **GC 工作原理简图**
```drawio
```
### **2.6 安全机制**
```drawio
```
```java
// 类型安全示例
public class TypeSafetyDemo {
public static void main(String[] args) {
Object obj = "Hello";
// 编译期检查:必须显式转型
// int num = obj; // 编译错误!
// 运行时检查:类型转换安全
if (obj instanceof String str) { // Java 16+ 模式匹配
System.out.println(str.length());
}
// 数组边界检查
int[] arr = {1, 2, 3};
// arr[10] = 5; // 运行时抛出 ArrayIndexOutOfBoundsException
}
}
```
### **2.7 高性能优化(JIT 编译器)**
```drawio
```
#### **JIT 优化技术示例**
```java
public class JITOptimizationDemo {
// 1. 方法内联(Inlining)
// JIT 会将短小方法直接嵌入调用处,减少方法调用开销
public int add(int a, int b) {
return a + b;
}
public int calculate() {
// JIT 优化后,add 方法会被内联
// return add(1, 2); → return 1 + 2; → return 3;
return add(1, 2);
}
// 2. 逃逸分析(Escape Analysis)
public void process() {
// point 对象未逃逸出方法,JIT 可能在栈上分配(标量替换)
Point point = new Point(1, 2);
int sum = point.x + point.y;
System.out.println(sum);
}
// 3. 循环优化
public int loopSum() {
int sum = 0;
for (int i = 0; i < 1000; i++) {
sum += i;
}
// JIT 可能进行循环展开、消除边界检查等优化
return sum;
}
}
```
### **2.8 特性总结表**
| **特性** | **描述** | **核心优势** |
| --- | --- | --- |
| **面向对象** | 封装、继承、多态 | 代码复用、结构清晰 |
| **跨平台** | JVM 屏蔽底层差异 | 一次编写,到处运行 |
| **多线程** | 语言原生支持 + 并发包 | 高效并发编程 |
| **自动 GC** | 垃圾自动回收 | 降低内存泄漏风险 |
| **安全性** | 多层安全检查 | 类型安全、访问控制 |
| **高性能** | JIT 即时编译 | 接近原生代码性能 |
| **丰富类库** | 标准库 + 第三方生态 | 开发效率高 |
## **三、Java 平台版本体系**
### **3.1 三大版本对比**
```drawio
```
### **3.2 详细对比**
| **版本** | **全称** | **定位** | **包含内容** | **应用场景** |
| --- | --- | --- | --- | --- |
| **Java SE** | Standard Edition | 标准版 | JVM + 核心类库 + 开发工具 | 桌面应用、简单服务端 |
| **Java EE** | Enterprise Edition | 企业版 | SE + 企业级规范(Servlet/JPA/EJB...) | 大型分布式系统 |
| **Java ME** | Micro Edition | 微型版 | 精简版 SE | 嵌入式设备(已淘汰) |
### **3.3 Java SE 核心组成**
```
// Java SE 提供的核心 API 示例
// 1. 集合框架 (java.util)
import java.util.ArrayList;
import java.util.HashMap;
// 2. IO/NIO (java.io, java.nio)
import java.io.FileInputStream;
import java.nio.file.Files;
// 3. 网络编程 (java.net)
import java.net.Socket;
import java.net.HttpURLConnection;
// 4. 并发编程 (java.util.concurrent)
import java.util.concurrent.ExecutorService;
import java.util.concurrent.CompletableFuture;
// 5. 时间日期 (java.time) - Java 8+
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
// 6. 反射 (java.lang.reflect)
import java.lang.reflect.Method;
import java.lang.reflect.Field;
```
### **3.4 Java EE 核心规范**
```drawio
```
```java
// Java EE 应用示例 - Servlet
// Java EE (javax)
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// Jakarta EE (jakarta) - 新版
import jakarta.servlet.http.HttpServlet;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("Hello, Java EE!
");
}
}
```
### **3.5 版本选择指南**
```drawio
```
## **四、Java 与 C++ 深度对比**
### **4.1 总体对比表**
| **对比维度** | **Java** | **C++** |
| --- | --- | --- |
| **设计理念** | 简单、安全、跨平台 | 高效、灵活、接近底层 |
| **编译执行** | 编译成字节码,JVM 解释/JIT执行 | 直接编译成机器码 |
| **内存管理** | 自动 GC,无需手动释放 | 手动 new/delete,或智能指针 |
| **指针操作** | 不支持指针,只有引用 | 完全支持指针运算 |
| **多重继承** | 单继承 + 多接口实现 | 支持多重继承 |
| **运算符重载** | 不支持 | 支持 |
| **泛型实现** | 类型擦除(编译期) | 模板(编译期代码膨胀) |
| **预处理器** | 无 | 有(#define, #include) |
| **跨平台** | JVM 保证 | 需重新编译 |
| **性能** | 略低于 C++(JIT 优化后接近) | 最高(直接机器码) |
### **4.2 代码对比示例**
#### **内存管理**
```java
// ==================== C++ ====================
#include
#include
class Person {
public:
std::string name;
Person(std::string n) : name(n) {
std::cout << "Person created: " << name << std::endl;
}
~Person() { // 析构函数
std::cout << "Person destroyed: " << name << std::endl;
}
};
int main() {
// 方式1: 手动管理(容易出错)
Person* p1 = new Person("Alice");
delete p1; // 必须手动释放!
// 方式2: 智能指针(推荐)
std::unique_ptr p2 = std::make_unique("Bob");
// 作用域结束自动释放
return 0;
}
```
```java
// ==================== Java ====================
public class Person {
private String name;
public Person(String name) {
this.name = name;
System.out.println("Person created: " + name);
}
// finalize 已被弃用,不推荐使用
// Java 9+ 推荐使用 Cleaner
public static void main(String[] args) {
Person p1 = new Person("Alice");
Person p2 = new Person("Bob");
p1 = null; // 解除引用
// GC 会在适当时机自动回收
System.gc(); // 建议 GC 运行(不保证立即执行)
}
}
```
#### **继承机制**
```java
// ==================== C++ 多重继承 ====================
class Flyable {
public:
virtual void fly() { std::cout << "Flying" << std::endl; }
};
class Swimmable {
public:
virtual void swim() { std::cout << "Swimming" << std::endl; }
};
// C++ 支持多重继承
class Duck : public Flyable, public Swimmable {
public:
void fly() override { std::cout << "Duck flying" << std::endl; }
void swim() override { std::cout << "Duck swimming" << std::endl; }
};
```
```java
// ==================== Java 单继承 + 多接口 ====================
interface Flyable {
default void fly() { // Java 8+ 接口默认方法
System.out.println("Flying");
}
}
interface Swimmable {
default void swim() {
System.out.println("Swimming");
}
}
// Java 单继承,但可实现多个接口
class Duck extends Animal implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("Duck flying");
}
@Override
public void swim() {
System.out.println("Duck swimming");
}
}
```
#### **泛型实现差异**
```java
// ==================== C++ 模板 ====================
template
class Box {
private:
T value;
public:
void set(T v) { value = v; }
T get() { return value; }
};
int main() {
Box intBox; // 编译时生成 Box 的代码
Box doubleBox; // 编译时生成 Box 的代码
// 代码膨胀:每种类型生成独立的代码
}
```
```java
// ==================== Java 泛型(类型擦除)====================
public class Box {
private T value;
public void set(T v) { value = v; }
public T get() { return value; }
}
public class Main {
public static void main(String[] args) {
Box intBox = new Box<>();
Box doubleBox = new Box<>();
// 运行时类型信息被擦除
System.out.println(intBox.getClass() == doubleBox.getClass()); // true
// 编译后实际是:
// class Box { Object value; ... }
}
}
```
### **4.3 应用场景对比**
```drawio
```
## **五、总结**
```drawio
```